/******************************************************************************
** 公司名称：天津柯迪斯科技有限公司
** 版权信息：
** 文件名称： App_Protocol_5S.h
** 模块名称： 5S协议处理模块
** 版 本 号： V1.0
** 作    者： 蒲磊
** 
** 修改记录： 版本     修改人      时间         修改内容
******************************************************************************/
#ifndef __APP_PROTOCOL_LS_H_
#define __APP_PROTOCOL_LS_H_

/******************************************************************************
* 头文件
******************************************************************************/
#include "bsp.h"
/******************************************************************************
* 宏定义 ('#define')                             
******************************************************************************/
#define PUSH_SPEED      60      /*助力推行速度，6.0km/h*/
/******************************************************************************
* 类型定义 ('typedef')                                         
******************************************************************************/
typedef struct
{
	uint16_t 	Power;
	uint16_t 	Speed_0_1Km;
 	int8_t 	    Ctrl_Soc;   
	uint8_t		Wheel_Diameter;
 	uint16_t	ErrCode;
 	uint16_t	LowVoltage;    
    uint16_t	Para_Addr;    
    uint8_t     Unit;
    uint8_t     Class_type;
    uint8_t     Class_OptionMax;   
    uint16_t    Range;
    uint32_t    Odo;
    uint16_t    SoftVer[4];
    uint16_t    HardVer[2];
    uint8_t     UUID[13];       
}stRECEIVED_DATA;


typedef struct
{
/*run*/    
	uint8_t		Pas;                    /*档位*/
    uint8_t     Max_PWM;                /*助推时的最大PWM值，5S、KDS协议用*/
    uint8_t     Turn_Light_Left;        /*左转向灯 0关1开   */    
    uint8_t     Turn_Light_Right;       /*右转向灯 0关1开   */    
	uint8_t		Push;                   /*助推状态*/
	uint8_t		Lamp;                   /*大灯状态*/    
    uint8_t     Battery_Low;            /*电池欠压标志，5S协议有*/
/*set*/
    uint8_t    Assistant_Sensitivity;   /*助力灵敏度（助力过几个磁钢开始）*/
    uint8_t    Assistant_Dir;           /*助力方向，0-正，1-负*/
    uint8_t    Assistant_Num;           /*助力磁钢数*/
    uint8_t    Speed_Sensor_Num;        /*测速磁钢数量*/
    uint8_t    Start_Strength;          /*启动强度*/
    uint8_t    Handle_Push;             /*转把是否带助推*/
    uint8_t    Handle_Segement;         /*转把是否分档*/  
    uint16_t   Current_Limit;           /*限流值，分辨率：0.1A*/
    uint16_t   Sys_Voltage;             /*系统电压值，分辨率：0.1V*/    
    uint16_t   Low_Voltage;             /*系统欠压值，分辨率：0.1V*/
	uint8_t    Speed_Limit_Handle;      /*转把限速值，分辨率：1Km/h 8-45*/    
	uint8_t    Speed_Limit_Assist;      /*助力限速值，分辨率：1Km/h 8-45*/      
 	uint16_t   Wheel_Diameter;          /*轮径，mm 1-2000 */   
 	uint8_t    IsSaveFlg;               /*保存标志 */     
    
/*parameter*/    
 	uint8_t    ClassType;               /*Class */     
 	uint8_t    UintType;               /*单位 */ 

}stSEND_DATA;

typedef enum
{
	Send_Stop 			= 0,
	Send_Run_Data,
    Send_Config_RunData_OneTime,/*设置界面发送一次运行报文，确保把设置标志位置一*/
	Send_Config_Data,
    Send_Config_Data_OneTime,
	Send_Parameter_Data_Read,
    Send_Key_Requiest,
	Send_Parameter_Data_Write,
    Send_Parameter_Out,
    Send_Poweroff_Write,
//    Send_Read_version,
}enSEND_DATA_TYPE;


typedef enum 
{
	Addr_Class_Type 			= 0x801C,
	Addr_Uint_Type 			    = 0x801D,
    
}enSEND_PARAMETER_ADDR;


/******************************************************************************
* 全局变量声明 
******************************************************************************/
extern uint16_t ceshi;
/******************************************************************************
* 函数声明 
******************************************************************************/
void vPROTOCOL_Get_OneFrame(uint8_t *pData,uint16_t Len);
void vPROTOCOL_Loop(void);
void vPROTOCOL_Send_Run_Data(void);
void vPROTOCOL_Send_Config_Data(void);
void vPROTOCOL_Send_Config_Data_OneTime(void);
void vPROTOCOL_Send_Config_RunData_OneTime(void);
    
void vPROTOCOL_Set_Lamp(uint8_t State);
void vPROTOCOL_Set_Turn_Light(uint8_t turn);
void vPROTOCOL_Set_Pas(int8_t Pas);
void vPROTOCOL_Set_Speed_Limit(uint16_t Speed);
void vPROTOCOL_Set_Wheel(uint16_t Wheel);
void vPROTOCOL_Set_Battery_Low(uint8_t Battery_Low);
void vPROTOCOL_Set_Assistant_Dir(uint8_t Assistant_Dir);
void vPROTOCOL_Set_Assistant_Num(uint8_t Assistant_Num);
void vPROTOCOL_Set_Assistant_Sensitivity(uint8_t Assistant_Sensitivity);
void vPROTOCOL_Set_Speed_Sensor_Num(uint8_t Speed_Sensor_Num);
void vPROTOCOL_Set_Start_Strength(uint8_t Start_Strength);
void vPROTOCOL_Set_Handle_Push(uint8_t Handle_Push);
void vPROTOCOL_Set_Handle_Segement(uint8_t Handle_Segement);
void vPROTOCOL_Set_Low_Voltage(uint16_t Low_Voltage);
void vPROTOCOL_Set_Sys_Voltage(uint16_t Sys_Voltage);
void vPROTOCOL_Set_Current_Limit(uint16_t Current_Limit);
void vPROTOCOL_Set_Value_When_ExitSetting(void);

uint16_t usPROTOCOL_Get_Power(void);
uint16_t usPROTOCOL_Get_Speed(void);
uint8_t usPROTOCOL_Get_Unit(void);
uint8_t usPROTOCOL_Get_ClassType(void);
uint16_t ucPROTOCOL_Get_Errcode(void);
void ucPROTOCOL_Get_HardVer(uint16_t *PverH);
void ucPROTOCOL_Get_SoftVer(uint16_t *Pvers);

void vPROTOCOL_Send(void);

void vPROTOCOL_ResetCommunicationOverTime(void);
void vPROTOCOL_Set_Value_When_PowerOn(void);
int8_t cPROTOCOL_Get_Soc(void);
void vPROTOCOL_Set_Pas_Range(int8_t Pas_Range);
uint16_t usPROTOCOL_Get_ToGoRange(void);
uint32_t usPROTOCOL_Get_Odo(void);

void vPROTOCOL_Updata_Speed_Limit(void);
void vPROTOCOL_Send_Write_Poweroff(void);
void vPROTOCOL_Read_version(uint8_t in_out);
uint16_t  ucPROTOCOL_Get_MCU_Type(void);
uint8_t  ucPROTOCOL_Get_ClassOption_Type(void);
#endif
